package br.ufrn.dimap.MetricDslLanguage.parser.antlr.internal; 

import org.eclipse.xtext.*;
import org.eclipse.xtext.parser.*;
import org.eclipse.xtext.parser.impl.*;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.common.util.Enumerator;
import org.eclipse.xtext.parser.antlr.AbstractInternalAntlrParser;
import org.eclipse.xtext.parser.antlr.XtextTokenStream;
import org.eclipse.xtext.parser.antlr.XtextTokenStream.HiddenTokens;
import org.eclipse.xtext.parser.antlr.AntlrDatatypeRuleToken;
import br.ufrn.dimap.MetricDslLanguage.services.MetricDslGrammarAccess;



import org.antlr.runtime.*;
import java.util.Stack;
import java.util.List;
import java.util.ArrayList;

@SuppressWarnings("all")
public class InternalMetricDslParser extends AbstractInternalAntlrParser {
    public static final String[] tokenNames = new String[] {
        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_STRING", "RULE_ID", "RULE_INT", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_WS", "RULE_ANY_OTHER", "'relates'", "'description'", "'type'", "'form'", "'id'", "'unit'", "'activityBegin'", "'activityEnd'", "'tasks'", "'artefacts'", "'hardData'", "'softData'", "'normalizedData'", "'continuous'", "'intercalated'", "'minutes'", "'uc'", "'numbers'"
    };
    public static final int RULE_ID=5;
    public static final int T__28=28;
    public static final int T__27=27;
    public static final int T__26=26;
    public static final int T__25=25;
    public static final int T__24=24;
    public static final int T__23=23;
    public static final int T__22=22;
    public static final int RULE_ANY_OTHER=10;
    public static final int T__21=21;
    public static final int T__20=20;
    public static final int RULE_SL_COMMENT=8;
    public static final int EOF=-1;
    public static final int RULE_ML_COMMENT=7;
    public static final int T__19=19;
    public static final int RULE_STRING=4;
    public static final int T__16=16;
    public static final int T__15=15;
    public static final int T__18=18;
    public static final int T__17=17;
    public static final int T__12=12;
    public static final int T__11=11;
    public static final int T__14=14;
    public static final int T__13=13;
    public static final int RULE_INT=6;
    public static final int RULE_WS=9;

    // delegates
    // delegators


        public InternalMetricDslParser(TokenStream input) {
            this(input, new RecognizerSharedState());
        }
        public InternalMetricDslParser(TokenStream input, RecognizerSharedState state) {
            super(input, state);
             
        }
        

    public String[] getTokenNames() { return InternalMetricDslParser.tokenNames; }
    public String getGrammarFileName() { return "../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g"; }



     	private MetricDslGrammarAccess grammarAccess;
     	
        public InternalMetricDslParser(TokenStream input, MetricDslGrammarAccess grammarAccess) {
            this(input);
            this.grammarAccess = grammarAccess;
            registerRules(grammarAccess.getGrammar());
        }
        
        @Override
        protected String getFirstRuleName() {
        	return "Model";	
       	}
       	
       	@Override
       	protected MetricDslGrammarAccess getGrammarAccess() {
       		return grammarAccess;
       	}



    // $ANTLR start "entryRuleModel"
    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:68:1: entryRuleModel returns [EObject current=null] : iv_ruleModel= ruleModel EOF ;
    public final EObject entryRuleModel() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleModel = null;


        try {
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:69:2: (iv_ruleModel= ruleModel EOF )
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:70:2: iv_ruleModel= ruleModel EOF
            {
             newCompositeNode(grammarAccess.getModelRule()); 
            pushFollow(FOLLOW_ruleModel_in_entryRuleModel75);
            iv_ruleModel=ruleModel();

            state._fsp--;

             current =iv_ruleModel; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleModel85); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleModel"


    // $ANTLR start "ruleModel"
    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:77:1: ruleModel returns [EObject current=null] : ( (lv_metrics_0_0= ruleMetrics ) )* ;
    public final EObject ruleModel() throws RecognitionException {
        EObject current = null;

        EObject lv_metrics_0_0 = null;


         enterRule(); 
            
        try {
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:80:28: ( ( (lv_metrics_0_0= ruleMetrics ) )* )
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:81:1: ( (lv_metrics_0_0= ruleMetrics ) )*
            {
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:81:1: ( (lv_metrics_0_0= ruleMetrics ) )*
            loop1:
            do {
                int alt1=2;
                int LA1_0 = input.LA(1);

                if ( (LA1_0==RULE_STRING) ) {
                    alt1=1;
                }


                switch (alt1) {
            	case 1 :
            	    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:82:1: (lv_metrics_0_0= ruleMetrics )
            	    {
            	    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:82:1: (lv_metrics_0_0= ruleMetrics )
            	    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:83:3: lv_metrics_0_0= ruleMetrics
            	    {
            	     
            	    	        newCompositeNode(grammarAccess.getModelAccess().getMetricsMetricsParserRuleCall_0()); 
            	    	    
            	    pushFollow(FOLLOW_ruleMetrics_in_ruleModel130);
            	    lv_metrics_0_0=ruleMetrics();

            	    state._fsp--;


            	    	        if (current==null) {
            	    	            current = createModelElementForParent(grammarAccess.getModelRule());
            	    	        }
            	           		add(
            	           			current, 
            	           			"metrics",
            	            		lv_metrics_0_0, 
            	            		"Metrics");
            	    	        afterParserOrEnumRuleCall();
            	    	    

            	    }


            	    }
            	    break;

            	default :
            	    break loop1;
                }
            } while (true);


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleModel"


    // $ANTLR start "entryRuleMetrics"
    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:107:1: entryRuleMetrics returns [EObject current=null] : iv_ruleMetrics= ruleMetrics EOF ;
    public final EObject entryRuleMetrics() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleMetrics = null;


        try {
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:108:2: (iv_ruleMetrics= ruleMetrics EOF )
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:109:2: iv_ruleMetrics= ruleMetrics EOF
            {
             newCompositeNode(grammarAccess.getMetricsRule()); 
            pushFollow(FOLLOW_ruleMetrics_in_entryRuleMetrics166);
            iv_ruleMetrics=ruleMetrics();

            state._fsp--;

             current =iv_ruleMetrics; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleMetrics176); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleMetrics"


    // $ANTLR start "ruleMetrics"
    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:116:1: ruleMetrics returns [EObject current=null] : ( ( (lv_name_0_0= RULE_STRING ) ) otherlv_1= 'relates' ( (otherlv_2= RULE_ID ) ) (otherlv_3= 'description' ( (lv_description_4_0= RULE_STRING ) ) ) (otherlv_5= 'type' ( (lv_type_6_0= ruleMetricType ) ) ) (otherlv_7= 'form' ( (lv_form_8_0= ruleColectType ) ) )? (otherlv_9= 'id' ( (lv_id_10_0= RULE_STRING ) ) ) (otherlv_11= 'unit' ( (lv_unit_12_0= ruleMetricUnit ) ) )? ( ( (lv_details_13_1= ruleActivityMetric | lv_details_13_2= ruleTaskMetric | lv_details_13_3= ruleArtefactMetric ) ) ) ) ;
    public final EObject ruleMetrics() throws RecognitionException {
        EObject current = null;

        Token lv_name_0_0=null;
        Token otherlv_1=null;
        Token otherlv_2=null;
        Token otherlv_3=null;
        Token lv_description_4_0=null;
        Token otherlv_5=null;
        Token otherlv_7=null;
        Token otherlv_9=null;
        Token lv_id_10_0=null;
        Token otherlv_11=null;
        Enumerator lv_type_6_0 = null;

        Enumerator lv_form_8_0 = null;

        Enumerator lv_unit_12_0 = null;

        EObject lv_details_13_1 = null;

        EObject lv_details_13_2 = null;

        EObject lv_details_13_3 = null;


         enterRule(); 
            
        try {
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:119:28: ( ( ( (lv_name_0_0= RULE_STRING ) ) otherlv_1= 'relates' ( (otherlv_2= RULE_ID ) ) (otherlv_3= 'description' ( (lv_description_4_0= RULE_STRING ) ) ) (otherlv_5= 'type' ( (lv_type_6_0= ruleMetricType ) ) ) (otherlv_7= 'form' ( (lv_form_8_0= ruleColectType ) ) )? (otherlv_9= 'id' ( (lv_id_10_0= RULE_STRING ) ) ) (otherlv_11= 'unit' ( (lv_unit_12_0= ruleMetricUnit ) ) )? ( ( (lv_details_13_1= ruleActivityMetric | lv_details_13_2= ruleTaskMetric | lv_details_13_3= ruleArtefactMetric ) ) ) ) )
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:120:1: ( ( (lv_name_0_0= RULE_STRING ) ) otherlv_1= 'relates' ( (otherlv_2= RULE_ID ) ) (otherlv_3= 'description' ( (lv_description_4_0= RULE_STRING ) ) ) (otherlv_5= 'type' ( (lv_type_6_0= ruleMetricType ) ) ) (otherlv_7= 'form' ( (lv_form_8_0= ruleColectType ) ) )? (otherlv_9= 'id' ( (lv_id_10_0= RULE_STRING ) ) ) (otherlv_11= 'unit' ( (lv_unit_12_0= ruleMetricUnit ) ) )? ( ( (lv_details_13_1= ruleActivityMetric | lv_details_13_2= ruleTaskMetric | lv_details_13_3= ruleArtefactMetric ) ) ) )
            {
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:120:1: ( ( (lv_name_0_0= RULE_STRING ) ) otherlv_1= 'relates' ( (otherlv_2= RULE_ID ) ) (otherlv_3= 'description' ( (lv_description_4_0= RULE_STRING ) ) ) (otherlv_5= 'type' ( (lv_type_6_0= ruleMetricType ) ) ) (otherlv_7= 'form' ( (lv_form_8_0= ruleColectType ) ) )? (otherlv_9= 'id' ( (lv_id_10_0= RULE_STRING ) ) ) (otherlv_11= 'unit' ( (lv_unit_12_0= ruleMetricUnit ) ) )? ( ( (lv_details_13_1= ruleActivityMetric | lv_details_13_2= ruleTaskMetric | lv_details_13_3= ruleArtefactMetric ) ) ) )
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:120:2: ( (lv_name_0_0= RULE_STRING ) ) otherlv_1= 'relates' ( (otherlv_2= RULE_ID ) ) (otherlv_3= 'description' ( (lv_description_4_0= RULE_STRING ) ) ) (otherlv_5= 'type' ( (lv_type_6_0= ruleMetricType ) ) ) (otherlv_7= 'form' ( (lv_form_8_0= ruleColectType ) ) )? (otherlv_9= 'id' ( (lv_id_10_0= RULE_STRING ) ) ) (otherlv_11= 'unit' ( (lv_unit_12_0= ruleMetricUnit ) ) )? ( ( (lv_details_13_1= ruleActivityMetric | lv_details_13_2= ruleTaskMetric | lv_details_13_3= ruleArtefactMetric ) ) )
            {
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:120:2: ( (lv_name_0_0= RULE_STRING ) )
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:121:1: (lv_name_0_0= RULE_STRING )
            {
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:121:1: (lv_name_0_0= RULE_STRING )
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:122:3: lv_name_0_0= RULE_STRING
            {
            lv_name_0_0=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleMetrics218); 

            			newLeafNode(lv_name_0_0, grammarAccess.getMetricsAccess().getNameSTRINGTerminalRuleCall_0_0()); 
            		

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getMetricsRule());
            	        }
                   		setWithLastConsumed(
                   			current, 
                   			"name",
                    		lv_name_0_0, 
                    		"STRING");
            	    

            }


            }

            otherlv_1=(Token)match(input,11,FOLLOW_11_in_ruleMetrics235); 

                	newLeafNode(otherlv_1, grammarAccess.getMetricsAccess().getRelatesKeyword_1());
                
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:142:1: ( (otherlv_2= RULE_ID ) )
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:143:1: (otherlv_2= RULE_ID )
            {
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:143:1: (otherlv_2= RULE_ID )
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:144:3: otherlv_2= RULE_ID
            {

            			if (current==null) {
            	            current = createModelElement(grammarAccess.getMetricsRule());
            	        }
                    
            otherlv_2=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleMetrics255); 

            		newLeafNode(otherlv_2, grammarAccess.getMetricsAccess().getRelatesToProcessCrossReference_2_0()); 
            	

            }


            }

            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:155:2: (otherlv_3= 'description' ( (lv_description_4_0= RULE_STRING ) ) )
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:155:4: otherlv_3= 'description' ( (lv_description_4_0= RULE_STRING ) )
            {
            otherlv_3=(Token)match(input,12,FOLLOW_12_in_ruleMetrics268); 

                	newLeafNode(otherlv_3, grammarAccess.getMetricsAccess().getDescriptionKeyword_3_0());
                
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:159:1: ( (lv_description_4_0= RULE_STRING ) )
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:160:1: (lv_description_4_0= RULE_STRING )
            {
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:160:1: (lv_description_4_0= RULE_STRING )
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:161:3: lv_description_4_0= RULE_STRING
            {
            lv_description_4_0=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleMetrics285); 

            			newLeafNode(lv_description_4_0, grammarAccess.getMetricsAccess().getDescriptionSTRINGTerminalRuleCall_3_1_0()); 
            		

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getMetricsRule());
            	        }
                   		setWithLastConsumed(
                   			current, 
                   			"description",
                    		lv_description_4_0, 
                    		"STRING");
            	    

            }


            }


            }

            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:177:3: (otherlv_5= 'type' ( (lv_type_6_0= ruleMetricType ) ) )
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:177:5: otherlv_5= 'type' ( (lv_type_6_0= ruleMetricType ) )
            {
            otherlv_5=(Token)match(input,13,FOLLOW_13_in_ruleMetrics304); 

                	newLeafNode(otherlv_5, grammarAccess.getMetricsAccess().getTypeKeyword_4_0());
                
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:181:1: ( (lv_type_6_0= ruleMetricType ) )
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:182:1: (lv_type_6_0= ruleMetricType )
            {
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:182:1: (lv_type_6_0= ruleMetricType )
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:183:3: lv_type_6_0= ruleMetricType
            {
             
            	        newCompositeNode(grammarAccess.getMetricsAccess().getTypeMetricTypeEnumRuleCall_4_1_0()); 
            	    
            pushFollow(FOLLOW_ruleMetricType_in_ruleMetrics325);
            lv_type_6_0=ruleMetricType();

            state._fsp--;


            	        if (current==null) {
            	            current = createModelElementForParent(grammarAccess.getMetricsRule());
            	        }
                   		set(
                   			current, 
                   			"type",
                    		lv_type_6_0, 
                    		"MetricType");
            	        afterParserOrEnumRuleCall();
            	    

            }


            }


            }

            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:199:3: (otherlv_7= 'form' ( (lv_form_8_0= ruleColectType ) ) )?
            int alt2=2;
            int LA2_0 = input.LA(1);

            if ( (LA2_0==14) ) {
                alt2=1;
            }
            switch (alt2) {
                case 1 :
                    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:199:5: otherlv_7= 'form' ( (lv_form_8_0= ruleColectType ) )
                    {
                    otherlv_7=(Token)match(input,14,FOLLOW_14_in_ruleMetrics339); 

                        	newLeafNode(otherlv_7, grammarAccess.getMetricsAccess().getFormKeyword_5_0());
                        
                    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:203:1: ( (lv_form_8_0= ruleColectType ) )
                    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:204:1: (lv_form_8_0= ruleColectType )
                    {
                    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:204:1: (lv_form_8_0= ruleColectType )
                    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:205:3: lv_form_8_0= ruleColectType
                    {
                     
                    	        newCompositeNode(grammarAccess.getMetricsAccess().getFormColectTypeEnumRuleCall_5_1_0()); 
                    	    
                    pushFollow(FOLLOW_ruleColectType_in_ruleMetrics360);
                    lv_form_8_0=ruleColectType();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getMetricsRule());
                    	        }
                           		set(
                           			current, 
                           			"form",
                            		lv_form_8_0, 
                            		"ColectType");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }


                    }


                    }
                    break;

            }

            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:221:4: (otherlv_9= 'id' ( (lv_id_10_0= RULE_STRING ) ) )
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:221:6: otherlv_9= 'id' ( (lv_id_10_0= RULE_STRING ) )
            {
            otherlv_9=(Token)match(input,15,FOLLOW_15_in_ruleMetrics375); 

                	newLeafNode(otherlv_9, grammarAccess.getMetricsAccess().getIdKeyword_6_0());
                
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:225:1: ( (lv_id_10_0= RULE_STRING ) )
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:226:1: (lv_id_10_0= RULE_STRING )
            {
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:226:1: (lv_id_10_0= RULE_STRING )
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:227:3: lv_id_10_0= RULE_STRING
            {
            lv_id_10_0=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleMetrics392); 

            			newLeafNode(lv_id_10_0, grammarAccess.getMetricsAccess().getIdSTRINGTerminalRuleCall_6_1_0()); 
            		

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getMetricsRule());
            	        }
                   		setWithLastConsumed(
                   			current, 
                   			"id",
                    		lv_id_10_0, 
                    		"STRING");
            	    

            }


            }


            }

            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:243:3: (otherlv_11= 'unit' ( (lv_unit_12_0= ruleMetricUnit ) ) )?
            int alt3=2;
            int LA3_0 = input.LA(1);

            if ( (LA3_0==16) ) {
                alt3=1;
            }
            switch (alt3) {
                case 1 :
                    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:243:5: otherlv_11= 'unit' ( (lv_unit_12_0= ruleMetricUnit ) )
                    {
                    otherlv_11=(Token)match(input,16,FOLLOW_16_in_ruleMetrics411); 

                        	newLeafNode(otherlv_11, grammarAccess.getMetricsAccess().getUnitKeyword_7_0());
                        
                    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:247:1: ( (lv_unit_12_0= ruleMetricUnit ) )
                    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:248:1: (lv_unit_12_0= ruleMetricUnit )
                    {
                    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:248:1: (lv_unit_12_0= ruleMetricUnit )
                    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:249:3: lv_unit_12_0= ruleMetricUnit
                    {
                     
                    	        newCompositeNode(grammarAccess.getMetricsAccess().getUnitMetricUnitEnumRuleCall_7_1_0()); 
                    	    
                    pushFollow(FOLLOW_ruleMetricUnit_in_ruleMetrics432);
                    lv_unit_12_0=ruleMetricUnit();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getMetricsRule());
                    	        }
                           		set(
                           			current, 
                           			"unit",
                            		lv_unit_12_0, 
                            		"MetricUnit");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }


                    }


                    }
                    break;

            }

            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:265:4: ( ( (lv_details_13_1= ruleActivityMetric | lv_details_13_2= ruleTaskMetric | lv_details_13_3= ruleArtefactMetric ) ) )
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:266:1: ( (lv_details_13_1= ruleActivityMetric | lv_details_13_2= ruleTaskMetric | lv_details_13_3= ruleArtefactMetric ) )
            {
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:266:1: ( (lv_details_13_1= ruleActivityMetric | lv_details_13_2= ruleTaskMetric | lv_details_13_3= ruleArtefactMetric ) )
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:267:1: (lv_details_13_1= ruleActivityMetric | lv_details_13_2= ruleTaskMetric | lv_details_13_3= ruleArtefactMetric )
            {
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:267:1: (lv_details_13_1= ruleActivityMetric | lv_details_13_2= ruleTaskMetric | lv_details_13_3= ruleArtefactMetric )
            int alt4=3;
            switch ( input.LA(1) ) {
            case 17:
                {
                alt4=1;
                }
                break;
            case 19:
                {
                alt4=2;
                }
                break;
            case 20:
                {
                alt4=3;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("", 4, 0, input);

                throw nvae;
            }

            switch (alt4) {
                case 1 :
                    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:268:3: lv_details_13_1= ruleActivityMetric
                    {
                     
                    	        newCompositeNode(grammarAccess.getMetricsAccess().getDetailsActivityMetricParserRuleCall_8_0_0()); 
                    	    
                    pushFollow(FOLLOW_ruleActivityMetric_in_ruleMetrics457);
                    lv_details_13_1=ruleActivityMetric();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getMetricsRule());
                    	        }
                           		set(
                           			current, 
                           			"details",
                            		lv_details_13_1, 
                            		"ActivityMetric");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }
                    break;
                case 2 :
                    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:283:8: lv_details_13_2= ruleTaskMetric
                    {
                     
                    	        newCompositeNode(grammarAccess.getMetricsAccess().getDetailsTaskMetricParserRuleCall_8_0_1()); 
                    	    
                    pushFollow(FOLLOW_ruleTaskMetric_in_ruleMetrics476);
                    lv_details_13_2=ruleTaskMetric();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getMetricsRule());
                    	        }
                           		set(
                           			current, 
                           			"details",
                            		lv_details_13_2, 
                            		"TaskMetric");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }
                    break;
                case 3 :
                    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:298:8: lv_details_13_3= ruleArtefactMetric
                    {
                     
                    	        newCompositeNode(grammarAccess.getMetricsAccess().getDetailsArtefactMetricParserRuleCall_8_0_2()); 
                    	    
                    pushFollow(FOLLOW_ruleArtefactMetric_in_ruleMetrics495);
                    lv_details_13_3=ruleArtefactMetric();

                    state._fsp--;


                    	        if (current==null) {
                    	            current = createModelElementForParent(grammarAccess.getMetricsRule());
                    	        }
                           		set(
                           			current, 
                           			"details",
                            		lv_details_13_3, 
                            		"ArtefactMetric");
                    	        afterParserOrEnumRuleCall();
                    	    

                    }
                    break;

            }


            }


            }


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleMetrics"


    // $ANTLR start "entryRuleActivityMetric"
    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:324:1: entryRuleActivityMetric returns [EObject current=null] : iv_ruleActivityMetric= ruleActivityMetric EOF ;
    public final EObject entryRuleActivityMetric() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleActivityMetric = null;


        try {
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:325:2: (iv_ruleActivityMetric= ruleActivityMetric EOF )
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:326:2: iv_ruleActivityMetric= ruleActivityMetric EOF
            {
             newCompositeNode(grammarAccess.getActivityMetricRule()); 
            pushFollow(FOLLOW_ruleActivityMetric_in_entryRuleActivityMetric534);
            iv_ruleActivityMetric=ruleActivityMetric();

            state._fsp--;

             current =iv_ruleActivityMetric; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleActivityMetric544); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleActivityMetric"


    // $ANTLR start "ruleActivityMetric"
    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:333:1: ruleActivityMetric returns [EObject current=null] : ( (otherlv_0= 'activityBegin' ( (otherlv_1= RULE_STRING ) ) ) (otherlv_2= 'activityEnd' ( (otherlv_3= RULE_STRING ) ) )? ) ;
    public final EObject ruleActivityMetric() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_1=null;
        Token otherlv_2=null;
        Token otherlv_3=null;

         enterRule(); 
            
        try {
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:336:28: ( ( (otherlv_0= 'activityBegin' ( (otherlv_1= RULE_STRING ) ) ) (otherlv_2= 'activityEnd' ( (otherlv_3= RULE_STRING ) ) )? ) )
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:337:1: ( (otherlv_0= 'activityBegin' ( (otherlv_1= RULE_STRING ) ) ) (otherlv_2= 'activityEnd' ( (otherlv_3= RULE_STRING ) ) )? )
            {
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:337:1: ( (otherlv_0= 'activityBegin' ( (otherlv_1= RULE_STRING ) ) ) (otherlv_2= 'activityEnd' ( (otherlv_3= RULE_STRING ) ) )? )
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:337:2: (otherlv_0= 'activityBegin' ( (otherlv_1= RULE_STRING ) ) ) (otherlv_2= 'activityEnd' ( (otherlv_3= RULE_STRING ) ) )?
            {
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:337:2: (otherlv_0= 'activityBegin' ( (otherlv_1= RULE_STRING ) ) )
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:337:4: otherlv_0= 'activityBegin' ( (otherlv_1= RULE_STRING ) )
            {
            otherlv_0=(Token)match(input,17,FOLLOW_17_in_ruleActivityMetric582); 

                	newLeafNode(otherlv_0, grammarAccess.getActivityMetricAccess().getActivityBeginKeyword_0_0());
                
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:341:1: ( (otherlv_1= RULE_STRING ) )
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:342:1: (otherlv_1= RULE_STRING )
            {
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:342:1: (otherlv_1= RULE_STRING )
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:343:3: otherlv_1= RULE_STRING
            {

            			if (current==null) {
            	            current = createModelElement(grammarAccess.getActivityMetricRule());
            	        }
                    
            otherlv_1=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleActivityMetric602); 

            		newLeafNode(otherlv_1, grammarAccess.getActivityMetricAccess().getActivityBeginActivityCrossReference_0_1_0()); 
            	

            }


            }


            }

            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:354:3: (otherlv_2= 'activityEnd' ( (otherlv_3= RULE_STRING ) ) )?
            int alt5=2;
            int LA5_0 = input.LA(1);

            if ( (LA5_0==18) ) {
                alt5=1;
            }
            switch (alt5) {
                case 1 :
                    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:354:5: otherlv_2= 'activityEnd' ( (otherlv_3= RULE_STRING ) )
                    {
                    otherlv_2=(Token)match(input,18,FOLLOW_18_in_ruleActivityMetric616); 

                        	newLeafNode(otherlv_2, grammarAccess.getActivityMetricAccess().getActivityEndKeyword_1_0());
                        
                    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:358:1: ( (otherlv_3= RULE_STRING ) )
                    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:359:1: (otherlv_3= RULE_STRING )
                    {
                    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:359:1: (otherlv_3= RULE_STRING )
                    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:360:3: otherlv_3= RULE_STRING
                    {

                    			if (current==null) {
                    	            current = createModelElement(grammarAccess.getActivityMetricRule());
                    	        }
                            
                    otherlv_3=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleActivityMetric636); 

                    		newLeafNode(otherlv_3, grammarAccess.getActivityMetricAccess().getActivityEndActivityCrossReference_1_1_0()); 
                    	

                    }


                    }


                    }
                    break;

            }


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleActivityMetric"


    // $ANTLR start "entryRuleTaskMetric"
    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:379:1: entryRuleTaskMetric returns [EObject current=null] : iv_ruleTaskMetric= ruleTaskMetric EOF ;
    public final EObject entryRuleTaskMetric() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleTaskMetric = null;


        try {
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:380:2: (iv_ruleTaskMetric= ruleTaskMetric EOF )
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:381:2: iv_ruleTaskMetric= ruleTaskMetric EOF
            {
             newCompositeNode(grammarAccess.getTaskMetricRule()); 
            pushFollow(FOLLOW_ruleTaskMetric_in_entryRuleTaskMetric674);
            iv_ruleTaskMetric=ruleTaskMetric();

            state._fsp--;

             current =iv_ruleTaskMetric; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleTaskMetric684); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleTaskMetric"


    // $ANTLR start "ruleTaskMetric"
    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:388:1: ruleTaskMetric returns [EObject current=null] : (otherlv_0= 'tasks' ( (otherlv_1= RULE_STRING ) )* ) ;
    public final EObject ruleTaskMetric() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token otherlv_1=null;

         enterRule(); 
            
        try {
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:391:28: ( (otherlv_0= 'tasks' ( (otherlv_1= RULE_STRING ) )* ) )
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:392:1: (otherlv_0= 'tasks' ( (otherlv_1= RULE_STRING ) )* )
            {
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:392:1: (otherlv_0= 'tasks' ( (otherlv_1= RULE_STRING ) )* )
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:392:3: otherlv_0= 'tasks' ( (otherlv_1= RULE_STRING ) )*
            {
            otherlv_0=(Token)match(input,19,FOLLOW_19_in_ruleTaskMetric721); 

                	newLeafNode(otherlv_0, grammarAccess.getTaskMetricAccess().getTasksKeyword_0());
                
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:396:1: ( (otherlv_1= RULE_STRING ) )*
            loop6:
            do {
                int alt6=2;
                int LA6_0 = input.LA(1);

                if ( (LA6_0==RULE_STRING) ) {
                    int LA6_2 = input.LA(2);

                    if ( (LA6_2==EOF||LA6_2==RULE_STRING) ) {
                        alt6=1;
                    }


                }


                switch (alt6) {
            	case 1 :
            	    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:397:1: (otherlv_1= RULE_STRING )
            	    {
            	    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:397:1: (otherlv_1= RULE_STRING )
            	    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:398:3: otherlv_1= RULE_STRING
            	    {

            	    			if (current==null) {
            	    	            current = createModelElement(grammarAccess.getTaskMetricRule());
            	    	        }
            	            
            	    otherlv_1=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleTaskMetric741); 

            	    		newLeafNode(otherlv_1, grammarAccess.getTaskMetricAccess().getTasksTaskCrossReference_1_0()); 
            	    	

            	    }


            	    }
            	    break;

            	default :
            	    break loop6;
                }
            } while (true);


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleTaskMetric"


    // $ANTLR start "entryRuleArtefactMetric"
    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:417:1: entryRuleArtefactMetric returns [EObject current=null] : iv_ruleArtefactMetric= ruleArtefactMetric EOF ;
    public final EObject entryRuleArtefactMetric() throws RecognitionException {
        EObject current = null;

        EObject iv_ruleArtefactMetric = null;


        try {
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:418:2: (iv_ruleArtefactMetric= ruleArtefactMetric EOF )
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:419:2: iv_ruleArtefactMetric= ruleArtefactMetric EOF
            {
             newCompositeNode(grammarAccess.getArtefactMetricRule()); 
            pushFollow(FOLLOW_ruleArtefactMetric_in_entryRuleArtefactMetric778);
            iv_ruleArtefactMetric=ruleArtefactMetric();

            state._fsp--;

             current =iv_ruleArtefactMetric; 
            match(input,EOF,FOLLOW_EOF_in_entryRuleArtefactMetric788); 

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "entryRuleArtefactMetric"


    // $ANTLR start "ruleArtefactMetric"
    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:426:1: ruleArtefactMetric returns [EObject current=null] : (otherlv_0= 'artefacts' ( (lv_name_1_0= RULE_STRING ) ) ( (otherlv_2= RULE_STRING ) )* ) ;
    public final EObject ruleArtefactMetric() throws RecognitionException {
        EObject current = null;

        Token otherlv_0=null;
        Token lv_name_1_0=null;
        Token otherlv_2=null;

         enterRule(); 
            
        try {
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:429:28: ( (otherlv_0= 'artefacts' ( (lv_name_1_0= RULE_STRING ) ) ( (otherlv_2= RULE_STRING ) )* ) )
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:430:1: (otherlv_0= 'artefacts' ( (lv_name_1_0= RULE_STRING ) ) ( (otherlv_2= RULE_STRING ) )* )
            {
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:430:1: (otherlv_0= 'artefacts' ( (lv_name_1_0= RULE_STRING ) ) ( (otherlv_2= RULE_STRING ) )* )
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:430:3: otherlv_0= 'artefacts' ( (lv_name_1_0= RULE_STRING ) ) ( (otherlv_2= RULE_STRING ) )*
            {
            otherlv_0=(Token)match(input,20,FOLLOW_20_in_ruleArtefactMetric825); 

                	newLeafNode(otherlv_0, grammarAccess.getArtefactMetricAccess().getArtefactsKeyword_0());
                
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:434:1: ( (lv_name_1_0= RULE_STRING ) )
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:435:1: (lv_name_1_0= RULE_STRING )
            {
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:435:1: (lv_name_1_0= RULE_STRING )
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:436:3: lv_name_1_0= RULE_STRING
            {
            lv_name_1_0=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleArtefactMetric842); 

            			newLeafNode(lv_name_1_0, grammarAccess.getArtefactMetricAccess().getNameSTRINGTerminalRuleCall_1_0()); 
            		

            	        if (current==null) {
            	            current = createModelElement(grammarAccess.getArtefactMetricRule());
            	        }
                   		setWithLastConsumed(
                   			current, 
                   			"name",
                    		lv_name_1_0, 
                    		"STRING");
            	    

            }


            }

            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:452:2: ( (otherlv_2= RULE_STRING ) )*
            loop7:
            do {
                int alt7=2;
                int LA7_0 = input.LA(1);

                if ( (LA7_0==RULE_STRING) ) {
                    int LA7_2 = input.LA(2);

                    if ( (LA7_2==EOF||LA7_2==RULE_STRING) ) {
                        alt7=1;
                    }


                }


                switch (alt7) {
            	case 1 :
            	    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:453:1: (otherlv_2= RULE_STRING )
            	    {
            	    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:453:1: (otherlv_2= RULE_STRING )
            	    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:454:3: otherlv_2= RULE_STRING
            	    {

            	    			if (current==null) {
            	    	            current = createModelElement(grammarAccess.getArtefactMetricRule());
            	    	        }
            	            
            	    otherlv_2=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleArtefactMetric867); 

            	    		newLeafNode(otherlv_2, grammarAccess.getArtefactMetricAccess().getArtefactsArtifactCrossReference_2_0()); 
            	    	

            	    }


            	    }
            	    break;

            	default :
            	    break loop7;
                }
            } while (true);


            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleArtefactMetric"


    // $ANTLR start "ruleMetricType"
    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:473:1: ruleMetricType returns [Enumerator current=null] : ( (enumLiteral_0= 'hardData' ) | (enumLiteral_1= 'softData' ) | (enumLiteral_2= 'normalizedData' ) ) ;
    public final Enumerator ruleMetricType() throws RecognitionException {
        Enumerator current = null;

        Token enumLiteral_0=null;
        Token enumLiteral_1=null;
        Token enumLiteral_2=null;

         enterRule(); 
        try {
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:475:28: ( ( (enumLiteral_0= 'hardData' ) | (enumLiteral_1= 'softData' ) | (enumLiteral_2= 'normalizedData' ) ) )
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:476:1: ( (enumLiteral_0= 'hardData' ) | (enumLiteral_1= 'softData' ) | (enumLiteral_2= 'normalizedData' ) )
            {
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:476:1: ( (enumLiteral_0= 'hardData' ) | (enumLiteral_1= 'softData' ) | (enumLiteral_2= 'normalizedData' ) )
            int alt8=3;
            switch ( input.LA(1) ) {
            case 21:
                {
                alt8=1;
                }
                break;
            case 22:
                {
                alt8=2;
                }
                break;
            case 23:
                {
                alt8=3;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("", 8, 0, input);

                throw nvae;
            }

            switch (alt8) {
                case 1 :
                    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:476:2: (enumLiteral_0= 'hardData' )
                    {
                    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:476:2: (enumLiteral_0= 'hardData' )
                    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:476:4: enumLiteral_0= 'hardData'
                    {
                    enumLiteral_0=(Token)match(input,21,FOLLOW_21_in_ruleMetricType918); 

                            current = grammarAccess.getMetricTypeAccess().getHardDataEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
                            newLeafNode(enumLiteral_0, grammarAccess.getMetricTypeAccess().getHardDataEnumLiteralDeclaration_0()); 
                        

                    }


                    }
                    break;
                case 2 :
                    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:482:6: (enumLiteral_1= 'softData' )
                    {
                    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:482:6: (enumLiteral_1= 'softData' )
                    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:482:8: enumLiteral_1= 'softData'
                    {
                    enumLiteral_1=(Token)match(input,22,FOLLOW_22_in_ruleMetricType935); 

                            current = grammarAccess.getMetricTypeAccess().getSoftDataEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
                            newLeafNode(enumLiteral_1, grammarAccess.getMetricTypeAccess().getSoftDataEnumLiteralDeclaration_1()); 
                        

                    }


                    }
                    break;
                case 3 :
                    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:488:6: (enumLiteral_2= 'normalizedData' )
                    {
                    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:488:6: (enumLiteral_2= 'normalizedData' )
                    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:488:8: enumLiteral_2= 'normalizedData'
                    {
                    enumLiteral_2=(Token)match(input,23,FOLLOW_23_in_ruleMetricType952); 

                            current = grammarAccess.getMetricTypeAccess().getNormalizedDataEnumLiteralDeclaration_2().getEnumLiteral().getInstance();
                            newLeafNode(enumLiteral_2, grammarAccess.getMetricTypeAccess().getNormalizedDataEnumLiteralDeclaration_2()); 
                        

                    }


                    }
                    break;

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleMetricType"


    // $ANTLR start "ruleColectType"
    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:498:1: ruleColectType returns [Enumerator current=null] : ( (enumLiteral_0= 'continuous' ) | (enumLiteral_1= 'intercalated' ) ) ;
    public final Enumerator ruleColectType() throws RecognitionException {
        Enumerator current = null;

        Token enumLiteral_0=null;
        Token enumLiteral_1=null;

         enterRule(); 
        try {
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:500:28: ( ( (enumLiteral_0= 'continuous' ) | (enumLiteral_1= 'intercalated' ) ) )
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:501:1: ( (enumLiteral_0= 'continuous' ) | (enumLiteral_1= 'intercalated' ) )
            {
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:501:1: ( (enumLiteral_0= 'continuous' ) | (enumLiteral_1= 'intercalated' ) )
            int alt9=2;
            int LA9_0 = input.LA(1);

            if ( (LA9_0==24) ) {
                alt9=1;
            }
            else if ( (LA9_0==25) ) {
                alt9=2;
            }
            else {
                NoViableAltException nvae =
                    new NoViableAltException("", 9, 0, input);

                throw nvae;
            }
            switch (alt9) {
                case 1 :
                    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:501:2: (enumLiteral_0= 'continuous' )
                    {
                    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:501:2: (enumLiteral_0= 'continuous' )
                    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:501:4: enumLiteral_0= 'continuous'
                    {
                    enumLiteral_0=(Token)match(input,24,FOLLOW_24_in_ruleColectType997); 

                            current = grammarAccess.getColectTypeAccess().getContinuousEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
                            newLeafNode(enumLiteral_0, grammarAccess.getColectTypeAccess().getContinuousEnumLiteralDeclaration_0()); 
                        

                    }


                    }
                    break;
                case 2 :
                    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:507:6: (enumLiteral_1= 'intercalated' )
                    {
                    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:507:6: (enumLiteral_1= 'intercalated' )
                    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:507:8: enumLiteral_1= 'intercalated'
                    {
                    enumLiteral_1=(Token)match(input,25,FOLLOW_25_in_ruleColectType1014); 

                            current = grammarAccess.getColectTypeAccess().getIntercalatedEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
                            newLeafNode(enumLiteral_1, grammarAccess.getColectTypeAccess().getIntercalatedEnumLiteralDeclaration_1()); 
                        

                    }


                    }
                    break;

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleColectType"


    // $ANTLR start "ruleMetricUnit"
    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:517:1: ruleMetricUnit returns [Enumerator current=null] : ( (enumLiteral_0= 'minutes' ) | (enumLiteral_1= 'uc' ) | (enumLiteral_2= 'numbers' ) ) ;
    public final Enumerator ruleMetricUnit() throws RecognitionException {
        Enumerator current = null;

        Token enumLiteral_0=null;
        Token enumLiteral_1=null;
        Token enumLiteral_2=null;

         enterRule(); 
        try {
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:519:28: ( ( (enumLiteral_0= 'minutes' ) | (enumLiteral_1= 'uc' ) | (enumLiteral_2= 'numbers' ) ) )
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:520:1: ( (enumLiteral_0= 'minutes' ) | (enumLiteral_1= 'uc' ) | (enumLiteral_2= 'numbers' ) )
            {
            // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:520:1: ( (enumLiteral_0= 'minutes' ) | (enumLiteral_1= 'uc' ) | (enumLiteral_2= 'numbers' ) )
            int alt10=3;
            switch ( input.LA(1) ) {
            case 26:
                {
                alt10=1;
                }
                break;
            case 27:
                {
                alt10=2;
                }
                break;
            case 28:
                {
                alt10=3;
                }
                break;
            default:
                NoViableAltException nvae =
                    new NoViableAltException("", 10, 0, input);

                throw nvae;
            }

            switch (alt10) {
                case 1 :
                    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:520:2: (enumLiteral_0= 'minutes' )
                    {
                    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:520:2: (enumLiteral_0= 'minutes' )
                    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:520:4: enumLiteral_0= 'minutes'
                    {
                    enumLiteral_0=(Token)match(input,26,FOLLOW_26_in_ruleMetricUnit1059); 

                            current = grammarAccess.getMetricUnitAccess().getMinutesEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
                            newLeafNode(enumLiteral_0, grammarAccess.getMetricUnitAccess().getMinutesEnumLiteralDeclaration_0()); 
                        

                    }


                    }
                    break;
                case 2 :
                    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:526:6: (enumLiteral_1= 'uc' )
                    {
                    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:526:6: (enumLiteral_1= 'uc' )
                    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:526:8: enumLiteral_1= 'uc'
                    {
                    enumLiteral_1=(Token)match(input,27,FOLLOW_27_in_ruleMetricUnit1076); 

                            current = grammarAccess.getMetricUnitAccess().getUcEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
                            newLeafNode(enumLiteral_1, grammarAccess.getMetricUnitAccess().getUcEnumLiteralDeclaration_1()); 
                        

                    }


                    }
                    break;
                case 3 :
                    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:532:6: (enumLiteral_2= 'numbers' )
                    {
                    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:532:6: (enumLiteral_2= 'numbers' )
                    // ../br.ufrn.dimap.MetricDslLanguage/src-gen/br/ufrn/dimap/MetricDslLanguage/parser/antlr/internal/InternalMetricDsl.g:532:8: enumLiteral_2= 'numbers'
                    {
                    enumLiteral_2=(Token)match(input,28,FOLLOW_28_in_ruleMetricUnit1093); 

                            current = grammarAccess.getMetricUnitAccess().getNumbersEnumLiteralDeclaration_2().getEnumLiteral().getInstance();
                            newLeafNode(enumLiteral_2, grammarAccess.getMetricUnitAccess().getNumbersEnumLiteralDeclaration_2()); 
                        

                    }


                    }
                    break;

            }


            }

             leaveRule(); 
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
        }
        return current;
    }
    // $ANTLR end "ruleMetricUnit"

    // Delegated rules


 

    public static final BitSet FOLLOW_ruleModel_in_entryRuleModel75 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleModel85 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleMetrics_in_ruleModel130 = new BitSet(new long[]{0x0000000000000012L});
    public static final BitSet FOLLOW_ruleMetrics_in_entryRuleMetrics166 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleMetrics176 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_STRING_in_ruleMetrics218 = new BitSet(new long[]{0x0000000000000800L});
    public static final BitSet FOLLOW_11_in_ruleMetrics235 = new BitSet(new long[]{0x0000000000000020L});
    public static final BitSet FOLLOW_RULE_ID_in_ruleMetrics255 = new BitSet(new long[]{0x0000000000001000L});
    public static final BitSet FOLLOW_12_in_ruleMetrics268 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_STRING_in_ruleMetrics285 = new BitSet(new long[]{0x0000000000002000L});
    public static final BitSet FOLLOW_13_in_ruleMetrics304 = new BitSet(new long[]{0x0000000000E00000L});
    public static final BitSet FOLLOW_ruleMetricType_in_ruleMetrics325 = new BitSet(new long[]{0x000000000000C000L});
    public static final BitSet FOLLOW_14_in_ruleMetrics339 = new BitSet(new long[]{0x0000000003000000L});
    public static final BitSet FOLLOW_ruleColectType_in_ruleMetrics360 = new BitSet(new long[]{0x0000000000008000L});
    public static final BitSet FOLLOW_15_in_ruleMetrics375 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_STRING_in_ruleMetrics392 = new BitSet(new long[]{0x00000000001B0000L});
    public static final BitSet FOLLOW_16_in_ruleMetrics411 = new BitSet(new long[]{0x000000001C000000L});
    public static final BitSet FOLLOW_ruleMetricUnit_in_ruleMetrics432 = new BitSet(new long[]{0x00000000001B0000L});
    public static final BitSet FOLLOW_ruleActivityMetric_in_ruleMetrics457 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleTaskMetric_in_ruleMetrics476 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleArtefactMetric_in_ruleMetrics495 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleActivityMetric_in_entryRuleActivityMetric534 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleActivityMetric544 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_17_in_ruleActivityMetric582 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_STRING_in_ruleActivityMetric602 = new BitSet(new long[]{0x0000000000040002L});
    public static final BitSet FOLLOW_18_in_ruleActivityMetric616 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_STRING_in_ruleActivityMetric636 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleTaskMetric_in_entryRuleTaskMetric674 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleTaskMetric684 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_19_in_ruleTaskMetric721 = new BitSet(new long[]{0x0000000000000012L});
    public static final BitSet FOLLOW_RULE_STRING_in_ruleTaskMetric741 = new BitSet(new long[]{0x0000000000000012L});
    public static final BitSet FOLLOW_ruleArtefactMetric_in_entryRuleArtefactMetric778 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleArtefactMetric788 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_20_in_ruleArtefactMetric825 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_RULE_STRING_in_ruleArtefactMetric842 = new BitSet(new long[]{0x0000000000000012L});
    public static final BitSet FOLLOW_RULE_STRING_in_ruleArtefactMetric867 = new BitSet(new long[]{0x0000000000000012L});
    public static final BitSet FOLLOW_21_in_ruleMetricType918 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_22_in_ruleMetricType935 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_23_in_ruleMetricType952 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_24_in_ruleColectType997 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_25_in_ruleColectType1014 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_26_in_ruleMetricUnit1059 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_27_in_ruleMetricUnit1076 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_28_in_ruleMetricUnit1093 = new BitSet(new long[]{0x0000000000000002L});

}